// Copyright (C) 2022 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
//
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<广西木子科技有限公司>，授权编号：<NT220402151538>，代码指纹：<A.648883738.885>，技术对接人微信：<ID: Lingmuziyi>】
// 【授权寄送：<收件：李先生、地址：南宁市科园西十路11号国电智能大厦1101F、电话：17736659550、邮箱：yingshashou@vip.qq.com>】
//
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
//
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rainbowchat.im.dto;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 * 指令body：群聊/世界频道聊天消息的数据内容封装类.
 * <p>
 * 即聊天数据从MobileIMSDK底层发送时，会将本对象转JSON字串后，作为
 * Protocal的dataContent数据进行传输。
 *
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @version 1.0
 * @since 4.3
 */
public class MsgBody4Group extends MsgBody4Guest {
    /**
     * 群聊消息扩散写前原始消息的指纹码。
     * <p>
     * 此指纹码目前主要用于消息“撤回”功能时。
     * 且仅对由“人”发起的正常聊天消息有意义，对{@link MsgType#TYPE_SYSTEAM$INFO}类型的消息无意义。
     */
    protected String parentFp = null;

    public MsgBody4Group() {
        super();
        this.cy = CHAT_TYPE_GROUP$CHAT;
    }

    public String getParentFp() {
        return parentFp;
    }

    public void setParentFp(String parentFp) {
        this.parentFp = parentFp;
    }

    /**
     * 构造世界频道/普通群聊系统通知(消息)协议体的DTO对象.
     *
     * @param toGid 要发送到的群id
     * @param msg   消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
     * @return
     * @msgType 聊天消息类型
     */
    public static MsgBody4Group constructGroupSystenMsgBody(String toGid, String msg) {
//		MsgBody4Group tcmd = new MsgBody4Group();
//		tcmd.setF(srcUserUid);
//		tcmd.setNickName(srcNickName);
//		tcmd.setT(toGid);
//		tcmd.setM(msg);
//		tcmd.setTy(msgType);
//		tcmd.setCy(MsgBody4Group.CHAT_TYPE_GROUP$CHAT);
//
//		return tcmd;

        return MsgBody4Group.constructGroupChatMsgBody(
                MsgBody4Group.TYPE_SYSTEAM$INFO
                // 此值一定是"0"，因为是服务端发给客户端的嘛
                , "0"
                // 服务端发送的系统级消息，没昵称
                , ""
                , toGid
                , msg
                , null);
    }

    /**
     * 构造世界频道/普通群聊消息协议体的DTO对象.
     *
     * @param srcUserUid  发送方的uid
     * @param srcNickName 发送方的昵称
     * @param toGid       要发送到的群id
     * @param msg         消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
     * @param parentFp    群聊消息扩散写前原始消息的指纹码（此指纹码目前主要用于消息“撤回”功能时）
     * @return
     * @msgType 聊天消息类型
     */
    public static MsgBody4Group constructGroupChatMsgBody(int msgType
            , String srcUserUid, String srcNickName, String toGid, String msg, String parentFp) {
        MsgBody4Group tcmd = new MsgBody4Group();
        tcmd.setF(srcUserUid);
        tcmd.setNickName(srcNickName);
        tcmd.setT(toGid);
        tcmd.setM(msg);
        tcmd.setTy(msgType);
        tcmd.setParentFp(parentFp);
        return tcmd;
    }

    /**
     * 从JSON字串中反序列化。
     *
     * @param originalMsg 即MsgBodyRoot对象的JSON序列化文本
     * @return 解析成功则返回对象，否则返回null
     * @since 2.0_rc11
     */
    public static MsgBody4Group parseFromSender(String originalMsg) {
        try {
            return new Gson().fromJson(originalMsg, MsgBody4Group.class);
        } catch (JsonSyntaxException e) {
            return null;
        }
    }
}
